﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Configuration;

using MySql.Data.MySqlClient;

namespace MakeIT.MiraPark.Negocios
{
    public static partial class ModelBO
    {

        public static List<AlertaVO> getAlertas()
        {
            return getAlertas(null, null, null);
        }
        public static List<AlertaVO> getAlertas( string placa, int? idCliente, string situacao)
        {
            StringBuilder query = new StringBuilder();

            String where = "WHERE ";
            query.AppendLine("SELECT IdAlerta, IdCliente, Placa, Mensagem, ReterSaida, ImpedirEntrada, ApenasComunicar, Situacao, DataExec, IdCabine ");
            query.AppendLine("FROM alerta ");
            if (placa != null)
            {
                query.AppendLine(where + (idCliente!=null?" (":"")+ "Placa=?Placa ");
                where = (idCliente!=null?"OR ":"AND ");
            }
            if (idCliente != null)
            {
                query.AppendLine(where + "IdCliente=?IdCliente " + (placa != null ? ") " : ""));
                where = "AND ";
            }
            if (situacao != null)
            {
                query.AppendLine(where + "Situacao=?Situacao ");
            }
            query.AppendLine("ORDER BY Mensagem ");

            MySqlCommand cmd = getConnection();
            cmd.CommandText = query.ToString();

            if (placa != null)
                cmd.Parameters.AddWithValue("?Placa", placa);
            if (idCliente != null)
                cmd.Parameters.AddWithValue("?IdCliente", idCliente);
            if (situacao != null)
                cmd.Parameters.AddWithValue("?Situacao", situacao);


            MySqlDataReader reader = null;
            try
            {
                cmd.Connection.Open();

                reader = cmd.ExecuteReader();

                List<AlertaVO> listAlerta = new List<AlertaVO>();

                while (reader.Read())
                {
                    AlertaVO alertaVO = AlertaVO.CreateAlertaVO();
                    alertaVO.idAlerta = reader.GetInt32("IdAlerta");
                    alertaVO.mensagem = reader.GetString("Mensagem");
                    alertaVO.idCliente = reader.GetInt32("IdCliente");
                    alertaVO.placa = reader.GetString("Placa");
                    alertaVO.reterSaida = reader.GetBoolean("ReterSaida");
                    alertaVO.impedirEntrada = reader.GetBoolean("ImpedirEntrada");
                    alertaVO.apenasComunicar = reader.GetBoolean("ApenasComunicar");
                    alertaVO.situacao = reader.GetString("Situacao");
                    if (!reader.IsDBNull(reader.GetOrdinal("DataExec")))
                        alertaVO.dataExec = reader.GetDateTime("DataExec");
                    if (!reader.IsDBNull(reader.GetOrdinal("IdCabine")))
                        alertaVO.idCabine = reader.GetInt32("IdCabine");

                    listAlerta.Add(alertaVO);
                }
                reader.Close();
                return listAlerta;
            }
            catch (Exception ex){ throw ex; }
            finally { cmd.Connection.Close(); }
        }

        public static void setAlerta(AlertaVO alertaVO)
        {
            StringBuilder query = new StringBuilder();

            query.AppendLine("UPDATE alerta ");
            query.AppendLine("SET IdCliente=?IdCliente, Placa=?Placa, Mensagem=?Mensagem, ReterSaida=?ReterSaida, ImpedirEntrada=?ImpedirEntrada, ApenasComunicar=?ApenasComunicar, Situacao=?Situacao, DataExec=?DataExec, IdCabine=?IdCabine ");
            query.AppendLine("WHERE IdAlerta=?IdAlerta ");

            MySqlCommand cmd = getConnection();
            cmd.CommandText = query.ToString();

            cmd.Parameters.AddWithValue("?IdAlerta", alertaVO.idAlerta);
            cmd.Parameters.AddWithValue("?Mensagem", alertaVO.mensagem);
            cmd.Parameters.AddWithValue("?Placa", alertaVO.placa);
            cmd.Parameters.AddWithValue("?IdCliente", alertaVO.idCliente);
            cmd.Parameters.AddWithValue("?ReterSaida", alertaVO.reterSaida);
            cmd.Parameters.AddWithValue("?ImpedirEntrada", alertaVO.impedirEntrada);
            cmd.Parameters.AddWithValue("?ApenasComunicar", alertaVO.apenasComunicar);
            cmd.Parameters.AddWithValue("?Situacao", alertaVO.situacao);
            cmd.Parameters.AddWithValue("?DataExec", alertaVO.dataExec);
            cmd.Parameters.AddWithValue("?IdCabine", alertaVO.idCabine);

            try
            {
                cmd.Connection.Open();

                cmd.ExecuteNonQuery();
            }
            catch (Exception ex) { throw ex; }
            finally { cmd.Connection.Close(); }

        }

        public static long newAlerta(AlertaVO alertaVO)
        {
            StringBuilder query = new StringBuilder();

            query.AppendLine("INSERT INTO alerta ");
            query.AppendLine("SET Placa=?Placa, IdCliente=?IdCliente, Mensagem=?Mensagem, ReterSaida=?ReterSaida, ImpedirEntrada=?ImpedirEntrada, ApenasComunicar=?ApenasComunicar, Situacao=?Situacao, DataExec=?DataExec, IdCabine=?IdCabine ");

            MySqlCommand cmd = getConnection();
            cmd.CommandText = query.ToString();

            cmd.Parameters.AddWithValue("?Mensagem", alertaVO.mensagem);
            cmd.Parameters.AddWithValue("?Placa", alertaVO.placa);
            cmd.Parameters.AddWithValue("?IdCliente", alertaVO.idCliente);
            cmd.Parameters.AddWithValue("?ReterSaida", alertaVO.reterSaida);
            cmd.Parameters.AddWithValue("?ImpedirEntrada", alertaVO.impedirEntrada);
            cmd.Parameters.AddWithValue("?ApenasComunicar", alertaVO.apenasComunicar);
            cmd.Parameters.AddWithValue("?Situacao", alertaVO.situacao);
            cmd.Parameters.AddWithValue("?DataExec", alertaVO.dataExec);
            cmd.Parameters.AddWithValue("?IdCabine", alertaVO.idCabine);

            try
            {
                cmd.Connection.Open();

                cmd.ExecuteNonQuery();
                return cmd.LastInsertedId;
            }
            catch (Exception ex) { throw ex; }
            finally { cmd.Connection.Close(); }

        }

        public static void delAlerta(AlertaVO alertaVO)
        {
            StringBuilder query = new StringBuilder();

            query.AppendLine("DELETE FROM alerta ");
            query.AppendLine("WHERE IdAlerta=?IdAlerta ");

            MySqlCommand cmd = getConnection();
            cmd.CommandText = query.ToString();

            cmd.Parameters.AddWithValue("?IdAlerta", alertaVO.idAlerta);

            try
            {
                cmd.Connection.Open();

                cmd.ExecuteNonQuery();
            }
            catch (Exception ex) { throw ex; }
            finally { cmd.Connection.Close(); }

        }
    }
}
